package com.geekdigging.day012;

/**
 * 最大子序和
 *
 * 给定一个整数数组 nums ，找到一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
 *
 * 示例:
 * 输入: [-2,1,-3,4,-1,2,1,-5,4]
 * 输出: 6
 * 解释: 连续子数组 [4,-1,2,1] 的和最大，为 6。
 *
 * 进阶:
 *
 * 如果你已经实现复杂度为 O(n) 的解法，尝试使用更为精妙的分治法求解。
 */
public class Solution {

    public int maxSubArray(int[] nums) {
        // 定义前 k -1 项最大和 pre 与最大和 maxAns
        int pre = 0, maxAns = nums[0];
        for (int i = 0; i < nums.length; i++) {
            // 获取前 k -1 项最大和（）
            pre = Math.max(pre + nums[i], nums[i]);
            // 比较前 k -1 项最大和与当前最大和
            maxAns = Math.max(maxAns, pre);
        }
        return maxAns;
    }
    
    

    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
        System.out.println(solution.maxSubArray(nums));
    }
}
